package proxy.jdkProxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

/**
 * @Author quan
 * @Description TODO
 * @Date 2023/7/27 17:35
 */

//自定义InvokeHandler并重写invoke方法
public class JDKInvocationHandler implements InvocationHandler {
    //目标对象就是被代理对象
    private Object target;
    public JDKInvocationHandler(Object target){
        this.target = target;
    }

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        //增强方法：前置处理
        //1、安全检查
        System.out.println("安全检查");
        //2、记录日志
        System.out.println("记录日志");
        //3.时间统计开始
        System.out.println("记录开始时间");

        //4、在invoke方法中会通过反射调用被代理类的方法
        Object retVal = method.invoke(target,args);
        //5、时间统计结束
        System.out.println("记录结束时间");
        return retVal;
    }
}
